package com.sumainfor.pc.epc.dao;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * @Author PuaChen
 * @Create 2018-11-23 11:06
 */
public interface SettlementManageMapper {

    /**
     * 生成结算单主表
     *
     * @param params
     * @return
     */
    int insertStaMain(Map<String, Object> params);

    /**
     * 根据采购单主表的编号 去查询结算单主表的信息
     *
     * @param buyerId
     * @return
     */
    Map<String, Object> getStaMainByBuyerId(String buyerId);

    /**
     * 根据结算单主表编号 去查结算单主表数据
     *
     * @param staId
     * @return
     */
    Map<String, Object> getStaMainById(String staId);

    /**
     * 根据条件分页查询结算单主表数据
     *
     * @param page
     * @param params
     * @return
     */
    IPage<Map<String, Object>> selectStaMainList(Page page, @Param("map") Map<String, Object> params);


    /**
     * 根据条件分页查询单个供应商的结算单所有数据
     *
     * @param page
     * @param params
     * @return
     */
    IPage<Map<String, Object>> selectStaForSupplierList(Page page, @Param("map") Map<String, Object> params);

    /**
     * 更新结算单主表的信息
     *
     * @param params
     * @return
     */
    int updateStaMainData(Map<String, Object> params);

    /**
     * 创建一个结算单详表的数据
     *
     * @param params
     * @return
     */
    int insertStaInfoData(Map<String, Object> params);

    /**
     * 更新一个结算单详表的数据
     *
     * @param params
     * @return
     */
    int updateStaInfoData(Map<String, Object> params);

    /**
     * 通过编号查询 结算单详表的信息
     *
     * @param staInfoId
     * @return
     */
    Map<String, Object> getStaInfoById(String staInfoId);

    /**
     * 根据结算单主表的编号去查询所有的详表信息
     *
     * @param params 参数：
     *               StasId 详表编号
     *               StaId 主表编号
     *               SupId 供应商编号
     *               instm 创建时间
     * @return
     */
    List<Map<String, Object>> selectStaInfo(Map<String, Object> params);

    /**
     * 查询结算单详细表 根据供应商编号进行查询 带有供应商的名称
     *
     * @param staId
     * @param page  分页
     * @return
     */
    IPage<Map<String, Object>> selectStaInfoLinkSupplier(Page page, @Param("staId") String staId);

    /**
     * 根据供应商的编号查询所有的 账单信息
     *
     * @param params
     * @param page   分页
     * @return
     */
    IPage<Map<String, Object>> selectSupplierStaInfo(Page page, @Param("map") Map<String, Object> params);

    /**
     * 创建申请打款表
     *
     * @param params
     * @return
     */
    int insertRemitData(Map<String, Object> params);

    /**
     * 查询采购单详情信息 通过采购单主编号 和供应商的标号
     *
     * @param buyerId
     * @param supId
     * @return
     */
    List<Map<String, Object>> selectBuyerInfoByBuyerId(@Param("buyerId") String buyerId, @Param("supId") String supId);

    /**
     * 查询 商品所有的信息 通过型号的编号
     *
     * @param moIds
     * @return
     */
    List<Map<String, Object>> selectShopInfo(@Param("moIds") List<String> moIds);

    /**
     * 查询申请打款记录
     *
     * @param page
     * @param params
     * @return
     */
    IPage<Map<String, Object>> selectApplyBillLog(Page page, @Param("map") Map<String, Object> params);

    /**
     * 查询打款记录 根据供应商编号去查询
     *
     * @param page
     * @param params RemState 审核状态 状态  1确认中  2.被驳回  3.已确认
     *               StaCut 账单类型 账单类型 1.装修结算单,2备件结算单,3.保洁结算单,4.硬装结算单
     *               Date 时间筛选
     * @return
     */
    IPage<Map<String, Object>> selectOutPriceLogBySupId(Page page, @Param("map") Map<String, Object> params);

    /**
     * 通过供应商 查找结算单详表数据
     *
     * @param supId
     * @param staMainId
     * @return
     */
    Map<String, Object> getApplyOrderInfoBySupId(@Param("supId") String supId, @Param("staMainId") String staMainId);

    /**
     * 查询这个结算单中的详表 中所有还没有完成的单子个数
     *
     * @param staId
     * @return
     */
    int getUnDoneOrderCount(String staId);

    /**
     * 统计账单钱的信息
     *
     * @param staId
     * @return
     */
    Map<String, Object> statisticsMoneyInfo(String staId);

    /**
     * 获取工程部结算单申请打款	 一条数据
     *
     * @param remId
     * @return
     */
    Map<String, Object> getRemitData(String remId);

    /**
     * 撤回删除 一条申请打款的记录
     *
     * @param remId
     * @return
     */
    int deleteRemitOne(String remId);

    /**
     * 获得 装修计划 其他费用的信息 通过装修计划主编号
     *
     * @param sourcesId
     * @return
     */
    List<Map<String, Object>> selectRestList(String sourcesId);


    /**
     * 查询被驳回的打款单的数量
     *
     * @param params StaId 结算单主表的编号
     *               OR
     *               SupId 供应商编号
     * @return
     */
    int getRejectRemitCount(Map<String, Object> params);

    /**
     * 查询申请打款记录 通过供应商编号查询
     *
     * @param page
     * @param params
     * @return
     */
    IPage<Map<String, Object>> selectApplyBillLogForSupplier(Page page, @Param("map") Map<String, Object> params);

    /**
     * 计算正在审核中的打款申请总金额
     *
     * @return
     */
    String selectRemitMoneySum(String staInfoId);

}
